"use strict";
const crypto = require("crypto");
module.exports = (app) => {
    const { STRING, INTEGER, DATE, ENUM } = app.Sequelize;
    // 配置（重要：一定要配置详细，一定要！！！）
    const ShopUser = app.model.define("shop_user", {
        id: {
            type: INTEGER(30).UNSIGNED,
            primaryKey: true,
            autoIncrement: true
        },
        shop_id: {
            type: INTEGER(30).UNSIGNED,
            allowNull: false,
            comment: '商家id',
            //  定义外键（重要）
            references: {
                model: 'shop', // 对应表名称（数据表名称）
                key: 'id' // 对应表的主键
            },
            onUpdate: 'restrict', // 更新时操作
            onDelete: 'cascade'  // 删除时操作
        },
        nickname: {
            type: STRING(20),
            allowNull: false,
            defaultValue: '',
            comment: '昵称',
        },
        phone: {
            type: STRING(20),
            comment: '电话',
        },
        pwd: {
            type: STRING(200),
            allowNull: false,
            defaultValue: '',
            comment: '密码',
            set(val) {
                const hmac = crypto.createHash("sha256", app.config.crypto.secret);
                hmac.update(val);
                let hash = hmac.digest("hex");
                this.setDataValue('pwd', hash);
            }
        },
        role: {
            type: ENUM,
            values: ['shop_admin', 'shop_write', 'shop_supervise'],
            allowNull: false,
            defaultValue: 'shop_write',
            comment: '角色  shop_admin超级管理员 shop_supervise 管理员  shop_write核销员'
        },
        token: {
            type: STRING(200),
            comment: 'token',
        },
        status: {
            type: ENUM,
            values: ['0', '1',],
            allowNull: false,
            defaultValue: '1',
            comment: '状态 0禁用 1启用 '
        },
        created_at: DATE,
        updated_at: DATE,
    });

    // 定义关联关系
    ShopUser.associate = function (model) {
        ShopUser.belongsTo(app.model.Shop);
    };
    return ShopUser;
};
